#!/usr/bin/env python3
"""
五子棋棋盘打印程序
五子棋是一种由双人对弈的纯策略型棋类游戏，使用的棋盘一般由横纵等距的各15条平行线构成，
这些线垂直交叉形成的225个交叉点为对弈双方的落子点。
本程序将按用户要求打印指定大小的五子棋棋盘。
"""

def print_gomoku_board(size=15):
    """
    打印指定大小的五子棋棋盘
    
    参数:
    size -- 棋盘大小（横纵线数量），默认为15
    """
    if size < 5 or size > 20:
        raise ValueError("棋盘大小必须在5到20之间")
    
    print(f"五子棋棋盘 ({size}x{size})")
    print("=" * (size * 2 - 1))
    
    # 打印棋盘
    for i in range(size):
        # 打印横线
        if i == 0:
            # 第一行显示列坐标
            print("  " + " ".join(chr(ord('A') + j) for j in range(size)))
        
        # 打印竖线和交叉点
        row = []
        for j in range(size):
            # 打印交叉点
            if i == size // 2 and j == size // 2:
                # 中心位置标记
                row.append("●")
            else:
                # 普通交叉点
                row.append("┼")
        
        # 添加行坐标
        row_str = "".join(row)
        # 在每个字符之间隔添加竖线
        formatted_row = ""
        for char in row_str:
            formatted_row += char + "|"
        formatted_row = formatted_row[:-1]  # 移除最后一个竖线
        
        # 添加行号
        row_number = str(i + 1).rjust(2)
        print(f"{row_number}{formatted_row}")
        
        # 打印横线（除最后一行除外）
        if i < size - 1:
            print("  " + "-" * (size * 2 - 1))
    
    print("=" * (size * 2 - 1))
    print(f"棋盘大小: {size}x{size}")
    print(f"交叉点总数: {size * size}")

def print_simple_gomoku_board(size=15):
    """
    打印简化版五子棋棋盘（只显示交叉点）
    
    参数:
    size -- 棋盘大小（横纵线数量），默认为15
    """
    if size < 5 or size > 20:
        raise ValueError("棋盘大小必须在5到20之间")
    
    print(f"简化版五子棋棋盘 ({size}x{size})")
    print("-" * (size * 2 - 1))
    
    for i in range(size):
        row = []
        for j in range(size):
            if i == size // 2 and j == size // 2:
                # 中心位置标记
                row.append("●")
            else:
                # 普通交叉点
                row.append("┼")
        
        print(" ".join(row))
    
    print("-" * (size * 2 - 1))

def interactive_gomoku_board():
    """
    交互式五子棋棋盘程序
    """
    print("欢迎子棋棋盘生成器")
    print("=" * 30)
    
    while True:
        try:
            size_input = input("请输入棋盘大小（5-20，默认15）: ")
            
            if size_input.strip() == "":
                size = 15
            else:
                size = int(size_input)
            
            if size < 5 or size > 20:
                print("错误：棋盘大小必须在5到20之间")
                continue
            
            # 选择棋盘样式
            style_input = input("请选择棋盘样式（1-详细版，2-简化版，默认1）: ")
            
            if style_input.strip() == "2":
                print_simple_gomoku_board(size)
            else:
                print_gomoku_board(size)
            
            # 询问用户是否继续
            continue_input = input("是否继续生成其他棋盘？(y/n): ")
            if continue_input.lower() != 'y':
                print("谢谢使用！")
                break
                
        except ValueError:
            print("错误：请输入有效的数字")
            continue

if __name__ == "__main__":
    # 演示：打印默认大小的详细版棋盘
    print_gomoku_board()
    
    # 演示：打印简化版棋盘
    print("\n" + "=" * 40 + "\n")
    print_simple_gomoku_board(10)
    
    # 启动交互式程序
    print("\n" + "=" * 40 + "\n")
    interactive_gomoku_board()
